package com.tuniu.agents.evaluator;

import reactor.core.publisher.Flux;

/**
 * IEvaluator interface
 * Defines the basic behavior of an evaluator
 */
public interface IEvaluator<T> {
    
    /**
     * Execute evaluation
     * @param conversationId The ID of the conversation
     * @param queryId The ID of the query
     * @return The evaluation result
     */
    EvaluationResult evaluate(String conversationId, String queryId);

    /**
     * Execute evaluation
     * @param userId The ID of the user
     * @return The evaluation result
     */
    EvaluationResult evaluate(String userId);

    /**
     * Execute evaluation and return results as a Flux
     * @param userId The ID of the user
     * @return A Flux of evaluation results
     */
    Flux<String> evaluateFlux(String userId);

    /**
     * Get the name of the evaluator
     * @return The name of the evalu
     */
    String getName();
    
    /**
     * Get the description of the evaluator
     * @return The description of the evaluator
     */
    String getDescription();
    
    /**
     * Check if the evaluator supports the target type
     * @param target The evaluation target
     * @return Whether it supports the target
     */
    boolean supports(T target);
}